前言
上一篇所提到的ROS系统之间的网络通讯,是通过将所有机器连接到一个ros master端口,实现不同机器之间消息的传递。这种方式有个潜在的缺陷,那就是整个网络中只能存在一个ros master,相当于只有一个服务器,所有机器发布和订阅的消息都必须经过该服务器,当数据量大时,可能会导致服务器负载过重(仅为猜测,未实际验证)。因此有必要探究一下能否实现两台机器之间分别运行自己的ros master,并且能够互相通信的方法。
从ROS wiki中找到了一下几种其他的通讯方案
rocon_multimaster
multimaster_fkie
foreign_relay
wifi_comm
multimaster
multimaster使用
比较一下感觉最后一个方案最为便捷,只需要做一些简单的配置而不涉及代码的修改。从链接中下载multimaster程序包,放在catkin_ws下的src文件夹,编译程序包
|
|
修改config.yaml的参数
|
|
将要发布的话题名称放在local_pubs中,不同的话题用“,”隔开,其他几个选项类似。
看一下master.launch里的内容
可以知道外面只需要一个远程master的ip地址作为参数,可以直接在launch文件里修改,也可以在运行launch文件时输入。如果在/etc/hosts文件中已经添加了远程计算机的ip地址和主机名,这里的参数直接使用主机名即可。
运行master.launch
这样,在两台计算机上分别运行master.launch后,就可以在命令行中看到远程计算机的ip与端口,发布和接收的消息,通讯就成功了。这个方案还有个好处是与第一种方案没有冲突,也就意味着我们可以选择某两台计算机作为服务器, 每个服务器又可以各自管理几台计算机,这样就可以降低第一种方案中一个服务器的压力。